﻿
#include "common.h"
#include "uimgr.h"
#include "ControlDef.h"
#include "DNF定义.h"
#include "strid.h"

//施工中……

int PageId_SelectJob;
int PageId_Setting;	
int PageId_Detail;

void BuildPage_SelectJob()
{
	PageId_SelectJob=UiMgr->CreatePage();

	SetCreateControlParam(0,0,NULL,PageId_SelectJob);
	CImage* CtrlBack=EasyCreateImage(CID_选择职业_底图,WinViewWidth,WinViewHeight,RID_选择职业背景,IT_Bitmap);

	SetCreateControlParam(0,0,NULL,PageId_SelectJob);
	CLabel* CtrlHead=EasyCreateLabel(CID_选择职业_标头,WinViewWidth,20,L"首页>选择职业");
	CtrlHead->SetTextColor(0xFF000000);
	CtrlHead->SetBackColor(0x80FFFFFF);
	CtrlHead->SetPadding(3);

	SetCreateControlParam(WinViewWidth/2-(320+320+180)/2,WinViewHeight/2-200/2,NULL,PageId_SelectJob);
	CImage* CtrlJob1=EasyCreateImage(CID_选择职业_奶妈,320,200);
	CtrlJob1->SetImage(EasyGetImageR(RID_奶妈大头像,IT_Bitmap));
	CtrlJob1->SetHoverImage(EasyGetImageR(RID_奶妈大头像Hover,IT_Bitmap));
	CtrlJob1->SetEventHandler([](UIControl* CtrlObj,UIEvent_t UIEvent,PVOID Param1,PVOID Param2)->int
	{
		UiMgr->SetDisplayPage(PageId_Setting);
		return 0;
	});

	SetCreateControlParam(WinViewWidth/2-(320+320+180)/2+180+320,WinViewHeight/2-200/2,NULL,PageId_SelectJob);
	CImage* CtrlJob2=EasyCreateImage(CID_选择职业_剑帝,320,200);
	CtrlJob2->SetImage(EasyGetImageR(RID_剑帝大头像,IT_Bitmap));
	CtrlJob2->SetHoverImage(EasyGetImageR(RID_剑帝大头像Hover,IT_Bitmap));
	CtrlJob2->SetEventHandler([](UIControl* CtrlObj,UIEvent_t UIEvent,PVOID Param1,PVOID Param2)->int
	{
		//剑帝的初始化代码还没写好
		//UiMgr->SetDisplayPage(PageId_Setting);
		return 0;
	});
}

const int 标头高度=20;
const int 返回按钮宽度=36;
const int 设置区宽度=700;
const int 信息区宽度=WinViewWidth-设置区宽度;
const int 面板标题高度=30;
const int 面板标题资源宽度=300;
const int 装备图标大小=28;
const int 滚动条宽度=16;

//每行20件,件横向间隔4像素,滚动条16像素,两边留空(700-16-20*28-19*4)/2=24
//纵向间隔:行间隔4像素,部位间隔10像素,所以1行的高28+10=38,2行的高28+28+4+10=70,4行的高=(4-1)*32+38=134
//根据[装备数量]累加得到13*70+10*38+134=1424-8=1416
//顶部标题高30,顶部留空10,底部留空10,一共1466像素
const int 装备面板高度=1466;
const int 条件面板高度=500;
const int 技能面板高度=500;
const int 打造面板高度=500;
const int 特性面板高度=500;

namespace 特性技能UI
{
	void 特性技能UI初始化(int PageId,CImage* Parent);
	void 特性技能UI反初始化();
	void 特性技能UI重置(int PageId,CImage* Parent);
}

void BuildPage_Settings()
{
	int NextX=0;
	int NextY=0;
	PageId_Setting=UiMgr->CreatePage();

	//底图
	SetCreateControlParam(0,0,NULL,PageId_Setting);
	CImage* Ctrl底图=EasyCreateImage(CID_底图,WinViewWidth,WinViewHeight,RID_主背景);

	//标头
	SetCreateControlParam(0,0,Ctrl底图,PageId_Setting);
	CLabel* Ctrl标头=EasyCreateLabel(CID_标头,WinViewWidth,标头高度,L"首页>选择职业>光启·光明骑士");
	Ctrl标头->SetTextColor(0xFF000000);
	Ctrl标头->SetBackColor(0x80FFFFFF);
	Ctrl标头->SetPadding(3);

	//返回按钮
	SetCreateControlParam(WinViewWidth-返回按钮宽度,0,Ctrl底图,PageId_Setting);
	CButton* Ctrl返回按钮=EasyCreateFlatButton(CID_返回按钮,返回按钮宽度,标头高度,L"返回");
	Ctrl返回按钮->SetEventHandler([](UIControl* CtrlObj,UIEvent_t UIEvent,PVOID Param1,PVOID Param2)->int
	{
		//返回时暂不保存，等程序关闭一并保存
		UiMgr->SetDisplayPage(PageId_SelectJob);
		return 0;
	});


	//底图-》左侧设置区
	SetCreateControlParam(0,标头高度,Ctrl底图,PageId_Setting);
	CVScrollView* Ctrl设置区=EasyCreateScrollView(CID_设置区,设置区宽度,WinViewHeight-标头高度,
		装备面板高度+条件面板高度+技能面板高度+打造面板高度+特性面板高度);

	//底图-》左侧设置区-》装备面板
	SetCreateControlParam(0,0,Ctrl设置区,PageId_Setting);
	CImage* Ctrl装备面板=EasyCreateImage(CID_装备面板,设置区宽度-滚动条宽度,装备面板高度);

	//底图-》左侧设置区-》装备面板-》标题
	SetCreateControlParam(0,0,Ctrl装备面板,PageId_Setting);
	CImage* Ctrl装备面板标题=EasyCreateImage(CID_装备面板标题,面板标题资源宽度,面板标题高度,RID_装备面板标题);





	//底图-》左侧设置区-》条件面板
	NextY=装备面板高度;
	SetCreateControlParam(0,NextY,Ctrl设置区,PageId_Setting);
	CImage* Ctrl条件面板=EasyCreateImage(CID_条件面板,设置区宽度-滚动条宽度,条件面板高度);

	//底图-》左侧设置区-》条件面板-》标题
	SetCreateControlParam(0,0,Ctrl条件面板,PageId_Setting);
	CImage* Ctrl条件面板标题=EasyCreateImage(CID_条件面板标题,面板标题资源宽度,面板标题高度,RID_条件面板标题);




	//底图-》左侧设置区-》技能面板
	NextY=装备面板高度+条件面板高度;
	SetCreateControlParam(0,NextY,Ctrl设置区,PageId_Setting);
	CImage* Ctrl技能面板=EasyCreateImage(CID_技能面板,设置区宽度-滚动条宽度,技能面板高度);

	//底图-》左侧设置区-》技能面板-》标题
	SetCreateControlParam(0,0,Ctrl技能面板,PageId_Setting);
	CImage* Ctrl技能面板标题=EasyCreateImage(CID_技能面板标题,面板标题资源宽度,面板标题高度,RID_技能面板标题);




	//底图-》左侧设置区-》打造面板
	NextY=装备面板高度+条件面板高度+技能面板高度;
	SetCreateControlParam(0,NextY,Ctrl设置区,PageId_Setting);
	CImage* Ctrl打造面板=EasyCreateImage(CID_打造面板,设置区宽度-滚动条宽度,打造面板高度);


	//底图-》左侧设置区-》打造面板-》标题
	SetCreateControlParam(0,0,Ctrl打造面板,PageId_Setting);
	CImage* Ctrl打造面板标题=EasyCreateImage(CID_打造面板标题,面板标题资源宽度,面板标题高度,RID_打造面板标题);





	//底图-》左侧设置区-》特性面板
	NextY=装备面板高度+条件面板高度+技能面板高度+打造面板高度;
	SetCreateControlParam(0,NextY,Ctrl设置区,PageId_Setting);
	CImage* Ctrl特性面板=EasyCreateImage(CID_特性面板,设置区宽度-滚动条宽度,特性面板高度);

	//底图-》左侧设置区-》特性面板-》标题
	SetCreateControlParam(0,0,Ctrl特性面板,PageId_Setting);
	CImage* Ctrl特性面板标题=EasyCreateImage(CID_特性面板标题,面板标题资源宽度,面板标题高度,RID_特性面板标题);

	特性技能UI::特性技能UI初始化(PageId_Setting,Ctrl特性面板);



	//底图-》右侧信息区
	SetCreateControlParam(设置区宽度,标头高度,Ctrl底图,PageId_Setting);
	CHTabView* Ctrl信息区=EasyCreateTabView(CID_信息区,信息区宽度,WinViewHeight-标头高度);

	//底图-》右侧信息区-》角色详情面板
	CImage* Ctrl角色详情面板=new CImage(GetCtrlId(CID_角色详情面板),0,0,信息区宽度,WinViewHeight-标头高度);
	Ctrl信息区->AppendTabPage(Ctrl角色详情面板,L"角色详情");

	//底图-》右侧信息区-》冷却详情面板
	CImage* Ctrl冷却详情面板=new CImage(GetCtrlId(CID_冷却详情面板),0,0,信息区宽度,WinViewHeight-标头高度);
	Ctrl信息区->AppendTabPage(Ctrl冷却详情面板,L"冷却详情");

	//底图-》右侧信息区-》选项详情面板
	CImage* Ctrl选项详情面板=new CImage(GetCtrlId(CID_选项详情面板),0,0,信息区宽度,WinViewHeight-标头高度);
	Ctrl信息区->AppendTabPage(Ctrl选项详情面板,L"选项详情");




	SetCreateControlParam(60,600,Ctrl角色详情面板,PageId_Setting);
	CLabel* Ctrl伤害标签=EasyCreateLabel(CID_伤害标签,150,20,L"3 0000 0000 0000");
	Ctrl伤害标签->SetBackColor(0x80FFFFFF);
	Ctrl伤害标签->SetTextColor(0xFFA1834C);
	Ctrl伤害标签->SetBorderColor(0xFF000000);
	Ctrl伤害标签->SetPadding(3);

	SetCreateControlParam(60,630,Ctrl角色详情面板,PageId_Setting);
	CLabel* Ctrl提升率标签=EasyCreateLabel(CID_提升率标签,150,20,L"6.17%");
	Ctrl提升率标签->SetBackColor(0x80FFFFFF);
	Ctrl提升率标签->SetTextColor(0xFFFF0000);
	Ctrl提升率标签->SetPadding(3);

	SetCreateControlParam(260,620,Ctrl角色详情面板,PageId_Setting);
	CButton* Ctrl设为基准按钮=EasyCreateFlatButton(CID_设为基准按钮,70,30,L"设为基准");

	SetCreateControlParam(115,680,Ctrl角色详情面板,PageId_Setting);
	CButton* Ctrl伤害分析按钮=EasyCreateButton(CID_伤害分析按钮,150,50,L"伤害分析");

}




void BuildPage_DamageDetail()
{
	
}



void InitPageData_Settings()
{
	//这个函数以后加个参数，区分2个职业
	CImage* Ctrl特性面板=(CImage*)UiMgr->FindControl(PageId_Setting,GetCtrlId(CID_特性面板));
	特性技能UI::特性技能UI重置(PageId_Setting,Ctrl特性面板);
}

void InitPageData_DamageDetail()
{

}

void UIQuitClear()
{
	特性技能UI::特性技能UI反初始化();
}


//设置管理器负责
void LoadUserSettings()
{

}

void SaveUserSettings()
{

}


void AppEntry()
{
	//图片加载设计的初衷是第一次加载提供所有参数，之后再加载就只需要名字
	//当然也允许每次都提供所有参数，随时用随时加载
	//但是控件SetImage后，会释放之前的Image，减少一次引用计数
	//而如果之前没有加载过，会将图片从内存中卸载
	//这导致我设置的引用计数形同虚设，不断加载和卸载图片
	//所以最终的方案是强制所有资源在开始加载一次，以后要用的时候通过名字获取

	//内存释放规则如下
	//所有资源开始都要加载一次，不保存指针，只保存名字，用到时通过LoadXXX()获取（增加引用计数）
	//程序退出时，由ResMgr的析构函数清理所有资源
	//使用SetImage()后，资源的管辖权转移到控件，由控件负责释放
	//控件创建后一般不销毁，改用Visible控制，用到控件时使用FindControl函数（不增加引用计数）
	//控件插入至UiMgr后才生效，此后由UiMgr和控件自身的析构函数负责相关内存
	//程序退出时，由UiMgr销毁所有控件，顺序是从子节点到父节点递归，然后销毁所有的页面

	//由于设计失误，每个字符串类型的Id用之前都应该到strid.cpp里注册成int型
	InitStringIdMap();
	//需要用到ResID，顺序不能错
	RetainAppImageRes();

	BuildPage_SelectJob();
	BuildPage_Settings();
	BuildPage_DamageDetail();

	//设置管理器负责
	LoadUserSettings();
	InitPageData_Settings();
	InitPageData_DamageDetail();

	UiMgr->SetDisplayPage(PageId_SelectJob);
}

void AppExit()
{
	//设置管理器负责
	SaveUserSettings();

	UIQuitClear();
	
	UninitStringIdMap();
}